package app

import (
	"uni-core/globals"
	"uni-core/pkg/pathchecker"

	"gitee.com/MM-Q/fastlog"
	"github.com/jmoiron/sqlx"
	_ "github.com/mattn/go-sqlite3"
)

// appInit 初始化应用程序
func appInit() (*fastlog.FastLog, *sqlx.DB, error) {
	// 日志初始化
	logCfg := fastlog.NewFastLogConfig(
		globals.LogDirName,
		globals.LogFileName,
	)
	// 设置日志过滤级别
	logCfg.SetLogLevel(fastlog.INFO)

	// 设置日志样式
	logCfg.SetLogFormat(fastlog.Simple)

	// 禁止终端输出
	logCfg.SetPrintToConsole(false)

	// 创建日志示例
	log, newLogErr := fastlog.NewFastLog(logCfg)
	if newLogErr != nil {
		return nil, nil, newLogErr
	}

	// 打印日志
	log.Success("uni-core 初始化日志成功")

	// 检查数据库目录
	if checkDirErr := pathchecker.CheckAndCreateDir(globals.DBDirName, true); checkDirErr != nil {
		log.Error("数据库目录创建失败", checkDirErr)
		return nil, nil, checkDirErr
	}

	// 如果数据库文件存在，直接返回数据库连接
	if pathInfo, checkPathErr := pathchecker.CheckPath(globals.DBFilePath); checkPathErr == nil && pathInfo.Exists {
		var db *sqlx.DB
		var connectErr error
		// 创建数据库连接
		db, connectErr = sqlx.Connect("sqlite3", globals.DBFilePath)
		if connectErr != nil {
			log.Error("数据库连接失败", connectErr)
			return nil, nil, connectErr
		}

		log.Success("数据库连接成功")
		return log, db, nil
	}

	// 如果数据库文件不存在，创建数据库文件
	db, connectErr := sqlx.Connect("sqlite3", globals.DBFilePath)
	if connectErr != nil {
		log.Error("数据库连接失败", connectErr)
		return nil, nil, connectErr
	}

	// 执行数据库初始化脚本
	if _, execErr := db.Exec(globals.InitSQL); execErr != nil {
		log.Error("数据库初始化脚本执行失败", execErr)
		return nil, nil, execErr
	}

	log.Success("数据库初始化成功")
	return log, db, nil
}
